/**   
 * @Title: BaseService.java 
 * @Package com.leesche.zcsp.center.web.service 
 * @Description:() 
 * @author dennies yang
 * @date 2016年9月21日 下午11:47:24 
 * @version V1.0   
 */
package com.leesche.zcsp.node.web.service;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.leesche.zcsp.node.utils.web.PagingCondition;
import com.leesche.zcsp.node.utils.web.PagingResult;

/**
 * @Title: BaseService.java
 * @Package com.leesche.zcsp.center.web.service
 * @Description:()
 * @author dennies yang
 * @date 2016年9月21日 下午11:47:24
 * @version V1.0
 */
public interface BaseService<T, S, D extends Serializable, P extends PagingCondition, ID extends Serializable> {

	long countByCriteria(S s);

	int deleteByCriteria(S s);

	int deleteByPrimaryKey(ID id);

	/**
	 * 娣诲姞绯荤粺鏉冮檺淇℃伅
	 * 
	 * @param record
	 *            绯荤粺鏉冮檺瀹炰綋瀵硅薄
	 * @return 鏁版嵁搴搃nsert缁撴灉
	 */
    int insert(T t);

	int insertSelective(T t);

	/**
	 * 鏍规嵁鏌ヨ鏉′欢妯＄増鏌ヨ绯荤粺鏉冮檺
	 * 
	 * @param Criteria
	 *            鏌ヨ鏉′欢妯＄増
	 * @return 绯荤粺鏉冮檺闆嗗悎
	 */
	// List<SysModule> selectByCriteria(S s);

	/**
	 * 鏍规嵁鏌ヨ鏉′欢妯＄増鏌ヨ绯荤粺鏉冮檺锛堝彲鑱斿悎鏌ヨ锛�
	 * 
	 * @param Criteria
	 *            鏌ヨ鏉′欢妯＄増
	 * @return 绯荤粺鏉冮檺锛堥敭鍊煎锛夐泦鍚�
	 */
    List<Map<String, Object>> selectByCriteria(S s);

	/**
	 * 根据对象ID获取对象信息
	 * 
	 * @param id
	 *            对象ID
	 * @return 对象信息
	 */
    T selectByPrimaryKey(ID id);

	int updateByCriteriaSelective(@Param("record") T t,
                                  @Param("Criteria") S s);

	int updateByCriteria(@Param("record") T t,
                         @Param("Criteria") S s);

	int updateByPrimaryKeySelective(T t);

	int updateByPrimaryKey(T t);

	int netUpdateByPrimaryKey(T t);

	PagingResult<D> findAllByPage(P p);
	
	/***
	 * 
	* @Title: findByCondition 
	* @Description: TODO(通过条件查询单挑数据) 
	* @param @param p
	* @param @return   
	* @return D   
	* @throws
	 */
    D  findByCondition(P p);
	/***
	 * 
	* @Title: findListsByCondition 
	* @Description: TODO(通过添加查询多条数据) 
	* @param @param p
	* @param @return   
	* @return List<D>   
	* @throws
	 */
    List<D> findListsByCondition(P p);


}
